package com.xigege.netty.nettyComponent.byteBuf;

import com.xigege.netty.nettyComponent.byteBuf.util.DebugByteBufUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.CompositeByteBuf;

public class TestCompositeByteBuf {
    public static void main(String[] args) {
        ByteBuf byteBuf1 = ByteBufAllocator.DEFAULT.buffer(10);
        byteBuf1.writeBytes(new byte[]{'a', 'b', 'c', 'd', 'e'});

        ByteBuf byteBuf2 = ByteBufAllocator.DEFAULT.buffer(10);
        byteBuf2.writeBytes(new byte[]{'f', 'g', 'h', 'i', 'j'});

//        // writeBytes会真正的发生数据复制
//        ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer();
//        // 发生了两次数据复制
//        byteBuf.writeBytes(byteBuf1).writeBytes(byteBuf2);
//        DebugByteBufUtil.log(byteBuf);

        // compositeBuffer方法把多个小的byteBuf在逻辑上组合到一起, 避免内存的复制
        CompositeByteBuf byteBufs = ByteBufAllocator.DEFAULT.compositeBuffer();
        // 将increaseWriterIndex置为true ，添加给定的ByteBuf并增加writerIndex。否则读指针位置不对
        byteBufs.addComponents(true, byteBuf1, byteBuf2);
        DebugByteBufUtil.log(byteBufs);
    }
}
